package org.javaboy.fmall.utils.generateTool;


import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 随机数生成工具（默认13位）
 *
 * @author find me
 * @create 2020/1-21 17:13
 * @ClassName MD5Util
 **/
public class RandomUtil {
    public static SimpleDateFormat sf = new SimpleDateFormat("MMddHHmm");


    /**
     * @param startType    首字母
     * @param returnNumber 返回个数
     * @return 11位长度的随机数(第一位标识类型 和枚举类对应 ， 第二位标识 返回的个数 中间7为当前时间 后面在位是随机数 ， 在后面两位是随机数)
     */
    public List<String> generateNumberString(DataForTypeEnum startType, Integer returnNumber) {
        Long headerData = basisDigitalFactory(startType);
        List<String> objects = new ArrayList<>(returnNumber);
        for (Integer i = 0; i < returnNumber; i++) {
            headerData += 1;
            objects.add(String.valueOf(headerData.toString()));
        }
        return objects;
    }


    /**
     * @param startType 首字母
     * @return 11位长度的随机数(第一位标识类型 和枚举类对应 ， 第二位标识 返回的个数 中间7为当前时间 后面在位是随机数 ， 在后面两位是随机数)
     */
    public String generateNumberString(DataForTypeEnum startType) {
        Long headerData = basisDigitalFactory(startType);
        Random random = new Random();
        headerData += random.nextInt(9) + 1;
        return headerData.toString();
    }

    /**
     * 生成随机的15位数字
     *
     * @param startType
     * @return
     */
    private long basisDigitalFactory(DataForTypeEnum startType) {
        DataForTypeEnum[] values = DataForTypeEnum.values();
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        sb.append(convertEnumToType(startType));
        sb.append(sf.format(new Date()));
        sb.append(random.nextInt(899) + 100);
        sb.append(random.nextInt(89) + 10);

        long l = Long.parseLong(sb.toString());
        sb.delete(0, sb.length());
        return l;
    }

    /**
     * 翻译枚举类成具体的数据
     *
     * @param startType
     * @return
     */
    private String convertEnumToType(DataForTypeEnum startType) {
        DataForTypeEnum dataForTypeEnum = DataForTypeEnum.valueOf(startType.getLetter());
        return dataForTypeEnum.getCode().toString();

    }

}